有時有些程式我們只想要它們在 Release Mode 上執行,最明顯的例子就是分析工具,我們不想要在開發的時候一直讓分析工具記錄我們的操作,這篇就來講如何讓某些程式只在 Debug Mode 執行,有些只在 Release Mode 上執行。
操作環境:
Xcode 8.1 (8B62)
iOS 10.1 (14B72)
只要加上這幾行判別式就可以了。
#ifdef DEBUG
// 只在開發時執行的程式
#else
// 只要發布版 App 執行的程式
#endif
如果想要寫成這樣
#ifdef RELEASE
#else
#endif
只要在 Project Build Setting 裡的「Preprocessor Macros」這個項目的 Release 欄位補上 RELEASE=1 就完成了。
其實欄位裡面要填什麼字是我們可以自己決定的,只是都大寫是大家寫這種常數的慣例而已。
如果你想要切換到 Release Mode 測試,可以去編輯 Scheme,修改 Build Configuration。
這裡使用的 #ifdef 語言是繼承自 C 語言的 Preprocessor,你會注意到當你在 Debug Mode 時,Release Mode 裡的程式高亮不會顯示,因為他們根本沒有被編譯,所以不用緊張。
在 swift 裡面也是一樣,只是語法稍微不同,專案建立時就可以使用:
#if DEBUG
print("debug")
#else
print("release")
#endif
如果想要寫成這樣:
#if RELEASE
print("debug")
#else
print("release")
#endif
按下面的步驟操作完成就可以了
網路上很多文章都叫人到「Other Swift Flags」這個欄位分別填上-DDEBUG、-DRELEASE,我覺得這不需要。
我不知道是因為他們互相抄襲還是從哪裡得來的資訊,因為很明顯在 Active Compilation Conditions 裡的 Debug 欄位上就已經預先填好了 DEBUG,這就是我們要的設定,再看這兩個欄位的解釋:
SWIFT_ACTIVE_COMPILATION_CONDITIONS:A list of compilation conditions to enable for conditional compilation expressions.
OTHER_SWIFT_FLAGS:A list of additional flags to pass to the Swift compiler.
前者應該才是我們要的,後者他們應該是用某個語法達到相同的效果。